//
// Created by bbnf on 09.06.2024.
//

#ifndef TODOAPPCPP_TODO_LOADER_H
#define TODOAPPCPP_TODO_LOADER_H

#include "storage_pch.h"
#include "storage/file_storage/file_parser.h"

namespace TodoApp::Storage {
    class TodoLoader {
    public:
        virtual auto loadTodos() -> std::vector<Todo *> = 0;
    };

    class FileTodoLoader : public TodoLoader {
    private:
        std::filesystem::path m_path;
    protected:
    public:
        explicit FileTodoLoader(std::filesystem::path path);

        virtual ~FileTodoLoader() = default;

        [[nodiscard]] auto path() const -> std::filesystem::path { return m_path; }

    };

    class TxtTodoLoader : public FileTodoLoader {
    private:
        FileStorage::TxtFileParser *m_parser;
    public:
        explicit TxtTodoLoader(std::filesystem::path path);

        ~TxtTodoLoader() override;

        auto loadTodos() -> std::vector<Todo *> override;

    };
}  // namespace TodoApp::Storage

#endif //TODOAPPCPP_TODO_LOADER_H
